import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome(executable_path="chromedriver.exe")
# driver =webdriver.Chrome #创建浏览器对象


driver.refresh()
# 2.输入网址
driver.get("https://demo6.tp-shop.cn/")
# 放大界面
driver.maximize_window()
# 3.页面信息操作
# 向当前浏览器会话添加一个指定的cookies，跳过登录验证
driver.add_cookie({"name": "PHPSESSID", "value": "98hb1c54i3ig3hqr6387tn1j51"})
driver.add_cookie({"name": "uname", "value": "17877837620"})
driver.add_cookie({"name": "user_id", "value": "316"})

# 获取cookies信息
cookies = driver.get_cookies()
print("cookies内容为:", cookies)
for co in cookies:
    print(co['name'])
# 3. 调用刷新方法
driver.refresh()
# # 暂停3秒
time.sleep(3)
# 通过XPATH方法获取搜索框和搜索按钮
driver.find_element(By.XPATH, "//input[@id='q']").send_keys("小米Note3")
# # 暂停3秒
time.sleep(3)
driver.find_element(By.XPATH, "//button[@class='ecsc-search-button']").click()
# # 暂停3秒
time.sleep(3)
# 跳转购物车界面
driver.find_element(By.ID, value="hd-my-cart").click()
# 跳转结算界面
# 自动化填写收货地址流程
# 这段代码用于模拟在网页中点击支付按钮后，在弹出的iframe窗口中填写收货地址信息

# 点击"支付"按钮（通过class名称定位）
driver.find_element(By.CLASS_NAME, value="butpayin").click()
# 等待2秒，确保页面有足够时间响应点击操作
time.sleep(2)

# 定位到弹出窗口的iframe（通过id定位），后续表单在iframe中
iframe = driver.find_element_by_id("layui-layer-iframe1")  # 注意：需替换为实际页面中iframe的id
# 切换到iframe内部，以便操作其中的元素
driver.switch_to.frame(iframe)

# 创建显式等待对象，最长等待10秒
wait = WebDriverWait(driver, 10)

# 1. 填写收货人姓名
# 等待"收货人"输入框可点击后，输入姓名"卢稳"（通过name属性定位）
consignee_input = wait.until(
    EC.element_to_be_clickable((By.NAME, "consignee"))
)
consignee_input.send_keys("卢稳")

# 2. 选择省份：广西壮族自治区
# 定位省份下拉框（通过id定位）
province = driver.find_element_by_css_selector("#province")
# 创建Select对象用于操作下拉框
province_select = Select(province)
# 通过可见文本选择"广西壮族自治区"
province_select.select_by_visible_text("广西壮族自治区")

# 3. 选择城市：南宁市
# 等待城市下拉框可点击（省份选择后可能需要加载城市数据）
city = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "#city"))
)
city_select = Select(city)

# 等待"南宁市"选项加载完成（确保城市数据已加载）
WebDriverWait(driver, 10).until(
    lambda d: any("南宁市" in opt.text for opt in city_select.options)
)
# 选择"南宁市"
city_select.select_by_visible_text("南宁市")

# 4. 选择区/县：江南区
# 等待区/县下拉框可点击（城市选择后可能需要加载区县数据）
district = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "#district"))
)
district_select = Select(district)

# 等待"江南区"选项加载完成
WebDriverWait(driver, 10).until(
    lambda d: any("江南区" in opt.text for opt in district_select.options)
)
# 选择"江南区"
district_select.select_by_visible_text("江南区")

# 5. 选择乡镇/街道：吴圩镇
# 等待乡镇下拉框可点击（区县选择后可能需要加载乡镇数据）
twon = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, "#twon"))
)
twon_select = Select(twon)

# 等待"吴圩镇"选项加载完成
WebDriverWait(driver, 10).until(
    lambda d: any("吴圩镇" in opt.text for opt in twon_select.options)
)
# 选择"吴圩镇"
twon_select.select_by_visible_text("吴圩镇")

# 6. 输入详细地址
# 等待详细地址输入框可点击后，输入"龙江路50号"
address_input = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.NAME, "address"))  # 可根据实际情况替换为By.ID, "address"
)
address_input.send_keys("江南路50号")

# 7. 输入邮政编码
# 等待邮政编码输入框可点击后，输入"530225"
zipcode_input = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.NAME, "zipcode"))
)
zipcode_input.send_keys("530225")

# 8. 输入手机号码
# 等待手机号码输入框可点击后，输入"18776895770"
mobile_input = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.NAME, "mobile"))
)
mobile_input.send_keys("18776895770")

# 9. 点击提交按钮（通过xpath定位按钮）
driver.find_element_by_xpath("/html/body/div/div/div/form/table/tbody/tr[6]/td[2]/button").click()

# 10. 切换回主页面上下文（若后续操作需要在原页面进行）
driver.switch_to.default_content()